package br.cesed.lti.ementol;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Session;

import br.cesed.lti.ementol.beans.Periodo;
import br.cesed.lti.ementol.beans.Usuario;
import br.cesed.lti.ementol.bo.PeriodoBO;
import cc.co.taciano.webbase.Fachada;
import cc.co.taciano.webbase.bo.BOException;

public class Ementol implements Fachada {

    /**
     * Instância única da fachada AvaliaCesed.
     */
    private static Ementol instance;

    /**
     * Sessão abertas com o banco para lazy instantiation.
     */
    private List<Session> sessoes;

    /**
     * Construtor privado do AvaliaCesed.
     */
    private Ementol() {
    }

    /**
     * Retorna a instância única do singleton AvaliaCesed (fachada).
     * @return A instância do AvaliaCesed.
     */
    public static synchronized Ementol getInstance() {
        if (instance == null) {
            instance = new Ementol();
        }
        return instance;
    }

    /**
     * Autentica o usuários. Se não for possível autenticar o usuário será
     * retornado <code>null</code>.
     * @param username Login do usuário.
     * @param password Senha do usuário.
     * @return O usuário autenticado, ou <code>null</code> caso contrário.
     * @throws BOException
     */
    public Usuario autenticarUsuario(String username, String password) throws BOException {
        //UsuarioBO bo = createUsuarioBO();
        return null;//bo.autenticar(username, password);
    }

    public Periodo getPeriodoAtivo() throws BOException {
        PeriodoBO bo = createPeriodoBO();
        return bo.getPeriodoAtivo();
    }

    // Métodos create (Factory Methods)

    /**
     * @return Um objeto de negócio.
     */
    private PeriodoBO createPeriodoBO() {
        return new PeriodoBO(this);
    }

    public void addSessaoHibernate(Session session) {
        if (sessoes == null) {
            sessoes = new ArrayList<Session>();
        }
        if (!sessoes.contains(session)) {
            sessoes.add(session);
        }
    }
}
